package chwgigs;

import java.util.Scanner;

public class J32_Exception {

	//예외처리 exception
	// 오류처리는 프로그래밍 언어의 중요한 기능이다
	// 좋은 오류 처리 메커니즘은 프로그래머가 보다 
	//쉽게 강력한 프로그램을 작성하고 몰래 섞여 들어오는 
	//버그를 방지 할 수 있다. 
	
	// 오류 error vs 예외 exception 
	// 프로그램의 정상실행을 방해하는 요소 
	// 오류: 프로그램의 잘못된 코드나 cpu연산의 잘못된 
	// 동작 으로 발생한다. 
	// 컴파일 오류 실행시간 오류로 다시 분류된다.
	// 오류가 발생하면 try블록의 처리를 중단하고 catch블록으로 제어가 넘어간다. 
	public static void main(String[] args) {
	   try{
		   System.out.println(100/0);   
	   }catch (Exception e){
		
		   //System.out.println("0으로 나눈다니 제정신?");
	    e.fillInStackTrace();
	   System.out.println( e.getMessage());
	   
	   } 
	  
	   //문제 1-10사이의 정수를 받아 출력하는 프로그램을 만드는데
	   // 중간에 문자를 입력시 오류를 발생하는 문장을 출력하게 하라. 
	  
	   Scanner sc=new Scanner(System.in);
	   
	  // while (true){
		  System.out.println("1부터 10사이 정수를 입력하세요");
		 int num=0;
		
		 try{ num=sc.nextInt();
			 System.out.println("입력하신 정수는="+num);
		
		 }catch (Exception e){
			
			 System.err.println("오류발생 정신차려");
			//이전에 일벼라한 내용이 문자인 경우
			//Scanner 내부 저장소 (버퍼)에 남아있기 때문에
			//계속 위의 문장이 무한반복으로 출력된다
			//이럴때 Scanner를 다시 초기화해야만 문제가 출력된다. 
			
			sc=new Scanner(System.in);
		 //} while 문 주석 처리

		    System.out.println("입력하신 정수는"+num);
		 }
	    //예외 처리 1 
		
		int [] name=new int[3];   
	    try {
	    name [0]=1;
	    name [1]=2;
	    name [2]=3;
	    name [3]=4;
	   } catch (Exception ex){
	    	System.err.println("배열의 크기를 초과 미친거야");
	    }
	    //예외 처리 2
	    
	    
	    int result =0;
	    try{
	    for (int i=10 ; i>=0; --i){
	    	result +=(int)(Math .random()*100) / i ;
	    	System.out.println(result);
	    }
	    }catch (Exception ee){
	    System.err.println("미친거야");
	    }
		 System.out.println(result);
		 
		// 예외처리 3
		try {
			//ㄴystem.out.println(100/0);
			char[] grade= new char [3];
			grade[3]='a';
			
		}catch (ArithmeticException ae){
			System.err.println("0으로 나누지 못함");
		}
		 catch (ArrayIndexOutOfBoundsException aiobe){
	       System.err.println("배열의 범위를 벗어나라");
		  }catch (Exception e1){
			  System.out.println("알 수 없는 오류도 인생의 일부분 일뿐 ");
		  }
	   
		 
	
   
	}
}//class
